#!/bin/bash
# 更新/添加指定json文件中的指定字段
# sh ./test_json_update_demo.sh
:<<!
更新/添加指定json文件中的指定字段
!


# ${var//old/new}

# phone="123456789\n第二行"
# echo ${phone/\n/\\n}
# phone_new=${phone/\n/\\n}
# echo "phone_new=$phone_new"

phone="12345n6789\n第二行"
echo ${phone/\\n/\\\n}
# phone_new=${phone/\n/\\n}
# echo "phone_new=$phone_new"
exit

# 当前【shell脚本】的工作目录
# $PWD代表获取当前路径，当cd后，$PWD也会跟着更新到新的cd路径。这个和在终端操作是一样的道理的
CurrentDIR_Script_Absolute="$( cd "$( dirname "$0" )" && pwd )"
#echo "CurrentDIR_Script_Absolute=${CurrentDIR_Script_Absolute}"
#bulidScriptCommon_dir_Absolute=${CurrentDIR_Script_Absolute}/..
bulidScriptCommon_dir_Absolute=${CurrentDIR_Script_Absolute%/*} # 使用此方法可以避免路径上有..
#echo "bulidScriptCommon_dir_Absolute=${bulidScriptCommon_dir_Absolute}"

#echo "CurrentDIR_Script_Absolute=${CurrentDIR_Script_Absolute}"
#CommonFun_HomeDir_Absolute3=${CurrentDIR_Script_Absolute}/..
#CommonFun_HomeDir_Absolute3=${CurrentDIR_Script_Absolute%/*} # 使用此方法可以避免路径上有..
#CommonFun_HomeDir_Absolute2=${CommonFun_HomeDir_Absolute3%/*}
#CommonFun_HomeDir_Absolute=${CommonFun_HomeDir_Absolute2%/*}

Demo_DATA_FILE_PATH="${CurrentDIR_Script_Absolute}/test_data_json_update.json"

# shouldShowIntroduction="true"
if [ "${shouldShowIntroduction}" == "true" ]; then
echo "---------------------------------------------e"
echo "---------前言：经我们在 wrap_dealresult_demo.sh 中测试验证得：处理的结果中有换行符，且需要保真来使用的话，那我们需要直接将处理结果保存到File中，再cat出来使用。示例如下：---------"

FILE_PATH=${Demo_DATA_FILE_PATH}

FileName=${FILE_PATH##*/} # 取最后的component
#echo "FileName=${FileName}"
FileType=${FileName##*.}
FileNameNoType=${FileName%%.*}
#echo "FileNameNoType=${FileNameNoType}, FileType=${FileType}"
FilePath_temp="${FileNameNoType}_temp.${FileType}"
#echo "FilePath_temp=${FilePath_temp}"
#echo "更新本次打包的内容到项目外和项目内，便于下次检查"
cat /dev/null > ${FilePath_temp} # 清空文件内容
#echo "开始执行①对${FILE_PATH}的内容添加 ${UpdateJsonKey} 属性的值，并在添加后输出到 ${FilePath_temp} 文件中"

ADD_WRAP_UPDATE_VALUE_1='{"data1": "第1行\n第2行"}'
cat ${FILE_PATH} | jq --argjson jsonString "${ADD_WRAP_UPDATE_VALUE_1}" \
    '.wrap1 = $jsonString' > ${FilePath_temp}
cat ${FilePath_temp}

#echo "开始执行②删除${FILE_PATH}的内容，并将之前创建的 ${FilePath_temp} 文件的内容复制给它，以达到更新的目的"
cat /dev/null > ${FILE_PATH}
cat "${FilePath_temp}" >> ${FILE_PATH} # FilePath_temp 加引号，避免名称中有空格，导致的错误
rm -f ${FilePath_temp}




echo "\n\n"
fi

# shouldTest_WrapConstant="true"
if [ "${shouldTest_WrapConstant}" == "true" ]; then
echo "---------------------------------------------eg2(有换行符的常量，更新验证通过✅)"
ADD_WRAP_UPDATE_VALUE_2='{"data2": "更新的【常量Json】中有个别属性的字符串值，含有换行符，第3行\n第4行"}'         #无变量，外层可以直接用单引号
SKIP_VALUE_CHECK_2="true"   # 要更新的value值，已确保是合法的json，不需要再检查json的有效性
echo "---${ADD_WRAP_UPDATE_VALUE_2}"
sh ${bulidScriptCommon_dir_Absolute}/update_json_file.sh -f "${Demo_DATA_FILE_PATH}" -k "test_result" -v "${ADD_WRAP_UPDATE_VALUE_2}" --skip-value-check "${SKIP_VALUE_CHECK_2}"
echo "\n\n"

ADD_WRAP_STRING="更新的【变量Json】中有个别属性的字符串值，含有换行符，第5行\n第6行"
a="678"
# ADD_WRAP_STRING="✅`dev_lzh_login_err`:详见outlines\n<font color=info>①登录失败错误提示</font><font color=comment>[02.09已提测][2.16已测试通过][2.16已合入预生产分支]</font><font color=comment>@producter1</font><font color=comment>@test1</font>"

fi

shouldTest_WrapVariable="true"
if [ "${shouldTest_WrapVariable}" == "true" ]; then
echo "---------------------------------------------eg3(有换行符的变量，更新还未验证通过)"
test_source_data1=$(cat $Demo_DATA_FILE_PATH | jq -r '.test_source.data1')
# echo "test_source_data1=$test_source_data1"
ADD_WRAP_UPDATE_FILE_VALUE_1="{\"data1\": \"${test_source_data1}\"}"   #有变量，外层必须是双引号，不能是单引号
echo "---${ADD_WRAP_UPDATE_FILE_VALUE_1}"
SKIP_VALUE_CHECK_3="true"   # 要更新的value值，已确保是合法的json，不需要再检查json的有效性
sh ${bulidScriptCommon_dir_Absolute}/update_json_file.sh -f "${Demo_DATA_FILE_PATH}" -k "test_result" -v "${ADD_WRAP_UPDATE_FILE_VALUE_1}" --skip-value-check "${SKIP_VALUE_CHECK_3}"
echo "\n\n"


test_source_data2=$(cat $Demo_DATA_FILE_PATH | jq -r '.test_source.data2')
# echo "test_source_data2=$test_source_data2"
ADD_WRAP_UPDATE_FILE_VALUE_2="{\"data2\": \"${test_source_data2}\"}"   #有变量，外层必须是双引号，不能是单引号
echo "---${ADD_WRAP_UPDATE_FILE_VALUE_2}"
SKIP_VALUE_CHECK_3="true"   # 要更新的value值，已确保是合法的json，不需要再检查json的有效性
sh ${bulidScriptCommon_dir_Absolute}/update_json_file.sh -f "${Demo_DATA_FILE_PATH}" -k "test_result" -v "${ADD_WRAP_UPDATE_FILE_VALUE_2}" --skip-value-check "${SKIP_VALUE_CHECK_3}"
echo "\n\n"



test_source_data3=$(cat $Demo_DATA_FILE_PATH | jq -r '.test_source.data3')
echo "test_source_data3(换行转义处理前)=$test_source_data3"
test_source_data3=${test_source_data3/\n/\\n}
echo "test_source_data3(换行转义处理后)=$test_source_data3"
ADD_WRAP_UPDATE_FILE_VALUE_3="{\"data3\": \"${test_source_data3}\"}"   #有变量，外层必须是双引号，不能是单引号
echo "---${ADD_WRAP_UPDATE_FILE_VALUE_3}"
SKIP_VALUE_CHECK_3="true"   # 要更新的value值，已确保是合法的json，不需要再检查json的有效性
sh ${bulidScriptCommon_dir_Absolute}/update_json_file.sh -f "${Demo_DATA_FILE_PATH}" -k "test_result" -v "${ADD_WRAP_UPDATE_FILE_VALUE_3}" --skip-value-check "${SKIP_VALUE_CHECK_3}"
echo "\n\n"


# test_source_data4=$(cat $Demo_DATA_FILE_PATH | jq -r '.test_source.data4')
# # echo "test_source_data4=$test_source_data4"
# ADD_WRAP_UPDATE_FILE_VALUE_4="{\"data4\": \"${test_source_data4}\"}"   #有变量，外层必须是双引号，不能是单引号
# echo "---${ADD_WRAP_UPDATE_FILE_VALUE_4}"
# SKIP_VALUE_CHECK_3="true"   # 要更新的value值，已确保是合法的json，不需要再检查json的有效性
# sh ${bulidScriptCommon_dir_Absolute}/update_json_file.sh -f "${Demo_DATA_FILE_PATH}" -k "test_result" -v "${ADD_WRAP_UPDATE_FILE_VALUE_4}" --skip-value-check "${SKIP_VALUE_CHECK_3}"
# echo "\n\n"

fi

echo "💐恭喜:测试脚本执行结束"
echo "\n\n"
